java

推荐列表 站点导航

当前位置:首页 > 脚本编程 > java >

"rw");file.setLength(filesize);//设置本地文件的长度 2.根据文件长度和线程数计算每条线

来源:网络  作者:网友投稿  发布时间:2021-01-14 13:58
java多线程下载实例详解,本文实例报告了java多线程下载。分享给各人供各人参考,详细如下:利用多线程下载文件可...

多线程下载的实现进程: 1.首先获得下载文件的长度,那么相当于占用了99个用户的资源, endSize,多线程下载文件之所以快, HttpURLConnection.getContentLength();RandomAccessFile file = new RandomAccessFile("youdao.exe", "bytes=" + startSize+ "-" + endSize);// 输出当前线程System.out.println("当前线程" + threadId + " 下载开始位置:" + startSize+ " 下载竣事位置:" + endSize);// 响应乐成// 配置随机读取文件的 开始位置accessFile.seek(startSize);// 获取相应流工具InputStream is = httpURLConnection.getInputStream();// 建设输出流工具byte buffer[] = new byte[1024];int len = 0;int threadTotal = 0;// 每个线程下载后生存记录 /while ((len = is.read(buffer)) != -1) {accessFile.write(buffer,假如A应用利用了99条线程下载文件。

A应用在处事器中一秒内就获得了990ms的执行时间,如:文件的长度为6M。

"rw");/spanthreadfile.seek(2097152);//从文件的什么位置开始写入数据 下面是通过详细实现类: 在写实现类之前我们首先要将要下载的文件放在处事器上并陈设: 我是放在了这里 D:\Tomcat\apache-tomcat-7.0.37\webapps\doudou目次下,那么,每秒出水量相等的环境下, path)).start();}} } catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace(); } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace(); } } public static void main(String[] args) { DownLoadTest downLoadTest = new DownLoadTest(); // 挪用下载要领 downLoadTest.testDown(); }}class DownLoadThread implements Runnable { // 下载文件的封装 public RandomAccessFile accessFile; // 每个线程 都拥有一个accessFile的文件工具 线程1 线程2 线程3 // 线程下载文件的起始位置 public int startSize; public int endSize; // 文件下载的path路径 public String path; public int threadId; // 线程的标识 public DownLoadThread(int threadId, threadAccessFile,并启动D:\Tomcat\apache-tomcat-7.0.37\bin下的startup.bat 1.DownLoadTest.java package ;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class DownLoadTest { public File file; public RandomAccessFile accessFile; // 线程的数量 public static int threadNum = 3; // 每个线程认真下载的巨细 int blockSize; // 建设会见的路径 public String path = "http://localhost:8080/doudou/youdao.exe"; public static int threadCount;// 数量 public void testDown() { try {// 建设出URL工具URL url = new URL(path);// 建设出 HttpURLConnection工具HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// 配置 发请求发送的方法httpURLConnection.setRequestMethod("GET");// 配置请求是否超时时间httpURLConnection.setConnectTimeout(5000);// 配置httpURLConnection.setRequestProperty("User-Agent",假设一秒内CPU分派给每条线程的平均执行时间是10ms。

"rw");file.setLength(filesize);//配置当地文件的长度 2.按照文件长度和线程数计较每条线程下载的数据长度和下载位置。

String path) { this.threadId = threadId; this.accessFile = accessFile; this.startSize = startSize; this.endSize = endSize; this.path = path; } @Override public void run() { // 执行run要领 try {// 建设文件File threadFile = new File(threadId + ".txt");if (threadFile.exists()) {// 读取该文件的内容// 建设文件的输入流工具FileInputStream fis = new FileInputStream(threadFile);// 回收东西类读取byte data[] = StreamTools.isToData(fis);// 转化成字符串String threadLen = new String(data);if ((threadLen != null) (!"".equals(threadLen))) {startSize = Integer.valueOf(threadLen);// 办理 416bug的错误if (startSize endSize) {startSize = endSize - 1;}}}// 建设URL工具URL url = new URL(path);// 建设HttpURLConnection工具HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// 配置请求的头httpURLConnection.setRequestMethod("GET");// 配置请求是否超时时间httpURLConnection.setConnectTimeout(5000);// 配置httpURLConnection.setRequestProperty("User-Agent", "rwd");new Thread(new DownLoadThread(i, len); } // 把读取的内容转换成byte数组 byte data[] = bops.toByteArray(); bops.flush(); bops.close(); is.close(); return data; }} 。

" Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)");// 是否响应乐成if (httpURLConnection.getResponseCode() == 200) {// 获取文件的巨细int size = httpURLConnection.getContentLength();System.out.println("文件的巨细" + size);// 建设文件file = new File("youdao.exe");accessFile = new RandomAccessFile(file,就如同一个水龙头, 利用多线程下载文件可以更快完成文件的下载,int startSize,如:指定从文件的2M位置开始下载文件, 3.利用Http的Range头字段指定每条线程从文件的什么位置开始下载,利用RandomAccessFile类指定每条线程从当地文件的什么位置开始写入数据 RandomAccessFile threadfile = new RandomAccessFile("spanyoudao.exe/spanspan "。

然后配置当地文件的长度, RandomAccessFile accessFile,是因为其抢占的处事器资源多, int endSize。

"bytes=2097152-"); 4.生存文件,放990毫秒的水必定比放10毫秒的水要多,每条线程开始下载的位置如下图所示,100条线程在计较机中并非并发执行,每条线程下载的数据长度为2M,在处事器中一条线程对应一个用户,startSize,如:假设处事器同时最多处事100个用户, len);threadTotal += len;// 记录你写入的长度 //xml文件// 通过文件记录文件下载的长度FileOutputStream fos = new FileOutputStream(threadFile);fos.write((threadTotal + "").getBytes());fos.flush();fos.close();}accessFile.close();is.close();System.out.println(threadId + "线程执行完毕");//线程操纵synchronized (DownLoadTest.class) {DownLoadTest.threadCount++;if (DownLoadTest.threadCount = DownLoadTest.threadNum) {for(int i=1;i=DownLoadTest.threadNum;i++){File file = new File(i+".txt");if(file.exists()){file.delete();}}}} } catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace(); } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace(); } }} 2.流东西的封装 StreamTools.java package ;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;public class StreamTools { public static byte[] isToData(InputStream is) throws IOException{ // 字节输出流 ByteArrayOutputStream bops = new ByteArrayOutputStream(); // 读取数据的缓存区 byte buffer[] = new byte[1024]; // 读取长度的记录 int len = 0; // 轮回读取 while ((len = is.read(buffer)) != -1) {bops.write(buffer,而是由CPU分别时间片轮番执行,代码如下: 复制代码 代码如下: HttpURLConnection.setRequestProperty("Range"。

" Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)");// 要害的配置httpURLConnection.setRequestProperty("Range",线程数为3, "rwd");// 配置文件的巨细accessFile.setLength(size);// 每个线程下载的巨细blockSize = size / threadNum;// 开三个线程 操纵此文件for (int i = 1; i = threadNum; i++) {// 1 2 3// 计较出每个线程开始的位置int startSize = (i - 1) * blockSize;// 竣事位置int endSize = (i) * blockSize;// 当线程是最后一个线程的时候if (i == threadNum) {// 判定文件的巨细是否大于计较出来的竣事位置if (size endSize) {// 竣事位置 便是 文件的巨细endSize = size;}}// 为每个线程建设一个随机的读取RandomAccessFile threadAccessFile = new RandomAccessFile(file,而其他应用在一秒内只有10ms的执行时间, 0, 0,。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/jiaob/java/12608.shtml

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

"rw");file.setLength(filesize);//设置本地文件的长度 2.根据文件长度和线程数计算每条线

2021-01-14 编辑:网友投稿

多线程下载的实现进程: 1.首先获得下载文件的长度,那么相当于占用了99个用户的资源, endSize,多线程下载文件之所以快, HttpURLConnection.getContentLength();RandomAccessFile file = new RandomAccessFile("youdao.exe", "bytes=" + startSize+ "-" + endSize);// 输出当前线程System.out.println("当前线程" + threadId + " 下载开始位置:" + startSize+ " 下载竣事位置:" + endSize);// 响应乐成// 配置随机读取文件的 开始位置accessFile.seek(startSize);// 获取相应流工具InputStream is = httpURLConnection.getInputStream();// 建设输出流工具byte buffer[] = new byte[1024];int len = 0;int threadTotal = 0;// 每个线程下载后生存记录 /while ((len = is.read(buffer)) != -1) {accessFile.write(buffer,假如A应用利用了99条线程下载文件。

A应用在处事器中一秒内就获得了990ms的执行时间,如:文件的长度为6M。

"rw");/spanthreadfile.seek(2097152);//从文件的什么位置开始写入数据 下面是通过详细实现类: 在写实现类之前我们首先要将要下载的文件放在处事器上并陈设: 我是放在了这里 D:\Tomcat\apache-tomcat-7.0.37\webapps\doudou目次下,那么,每秒出水量相等的环境下, path)).start();}} } catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace(); } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace(); } } public static void main(String[] args) { DownLoadTest downLoadTest = new DownLoadTest(); // 挪用下载要领 downLoadTest.testDown(); }}class DownLoadThread implements Runnable { // 下载文件的封装 public RandomAccessFile accessFile; // 每个线程 都拥有一个accessFile的文件工具 线程1 线程2 线程3 // 线程下载文件的起始位置 public int startSize; public int endSize; // 文件下载的path路径 public String path; public int threadId; // 线程的标识 public DownLoadThread(int threadId, threadAccessFile,并启动D:\Tomcat\apache-tomcat-7.0.37\bin下的startup.bat 1.DownLoadTest.java package ;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class DownLoadTest { public File file; public RandomAccessFile accessFile; // 线程的数量 public static int threadNum = 3; // 每个线程认真下载的巨细 int blockSize; // 建设会见的路径 public String path = "http://localhost:8080/doudou/youdao.exe"; public static int threadCount;// 数量 public void testDown() { try {// 建设出URL工具URL url = new URL(path);// 建设出 HttpURLConnection工具HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// 配置 发请求发送的方法httpURLConnection.setRequestMethod("GET");// 配置请求是否超时时间httpURLConnection.setConnectTimeout(5000);// 配置httpURLConnection.setRequestProperty("User-Agent",假设一秒内CPU分派给每条线程的平均执行时间是10ms。

"rw");file.setLength(filesize);//配置当地文件的长度 2.按照文件长度和线程数计较每条线程下载的数据长度和下载位置。

String path) { this.threadId = threadId; this.accessFile = accessFile; this.startSize = startSize; this.endSize = endSize; this.path = path; } @Override public void run() { // 执行run要领 try {// 建设文件File threadFile = new File(threadId + ".txt");if (threadFile.exists()) {// 读取该文件的内容// 建设文件的输入流工具FileInputStream fis = new FileInputStream(threadFile);// 回收东西类读取byte data[] = StreamTools.isToData(fis);// 转化成字符串String threadLen = new String(data);if ((threadLen != null) (!"".equals(threadLen))) {startSize = Integer.valueOf(threadLen);// 办理 416bug的错误if (startSize endSize) {startSize = endSize - 1;}}}// 建设URL工具URL url = new URL(path);// 建设HttpURLConnection工具HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// 配置请求的头httpURLConnection.setRequestMethod("GET");// 配置请求是否超时时间httpURLConnection.setConnectTimeout(5000);// 配置httpURLConnection.setRequestProperty("User-Agent", "rwd");new Thread(new DownLoadThread(i, len); } // 把读取的内容转换成byte数组 byte data[] = bops.toByteArray(); bops.flush(); bops.close(); is.close(); return data; }} 。

" Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)");// 是否响应乐成if (httpURLConnection.getResponseCode() == 200) {// 获取文件的巨细int size = httpURLConnection.getContentLength();System.out.println("文件的巨细" + size);// 建设文件file = new File("youdao.exe");accessFile = new RandomAccessFile(file,就如同一个水龙头, 利用多线程下载文件可以更快完成文件的下载,int startSize,如:指定从文件的2M位置开始下载文件, 3.利用Http的Range头字段指定每条线程从文件的什么位置开始下载,利用RandomAccessFile类指定每条线程从当地文件的什么位置开始写入数据 RandomAccessFile threadfile = new RandomAccessFile("spanyoudao.exe/spanspan "。

然后配置当地文件的长度, RandomAccessFile accessFile,是因为其抢占的处事器资源多, int endSize。

"bytes=2097152-"); 4.生存文件,放990毫秒的水必定比放10毫秒的水要多,每条线程开始下载的位置如下图所示,100条线程在计较机中并非并发执行,每条线程下载的数据长度为2M,在处事器中一条线程对应一个用户,startSize,如:假设处事器同时最多处事100个用户, len);threadTotal += len;// 记录你写入的长度 //xml文件// 通过文件记录文件下载的长度FileOutputStream fos = new FileOutputStream(threadFile);fos.write((threadTotal + "").getBytes());fos.flush();fos.close();}accessFile.close();is.close();System.out.println(threadId + "线程执行完毕");//线程操纵synchronized (DownLoadTest.class) {DownLoadTest.threadCount++;if (DownLoadTest.threadCount = DownLoadTest.threadNum) {for(int i=1;i=DownLoadTest.threadNum;i++){File file = new File(i+".txt");if(file.exists()){file.delete();}}}} } catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace(); } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace(); } }} 2.流东西的封装 StreamTools.java package ;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;public class StreamTools { public static byte[] isToData(InputStream is) throws IOException{ // 字节输出流 ByteArrayOutputStream bops = new ByteArrayOutputStream(); // 读取数据的缓存区 byte buffer[] = new byte[1024]; // 读取长度的记录 int len = 0; // 轮回读取 while ((len = is.read(buffer)) != -1) {bops.write(buffer,而是由CPU分别时间片轮番执行,代码如下: 复制代码 代码如下: HttpURLConnection.setRequestProperty("Range"。

" Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)");// 要害的配置httpURLConnection.setRequestProperty("Range",线程数为3, "rwd");// 配置文件的巨细accessFile.setLength(size);// 每个线程下载的巨细blockSize = size / threadNum;// 开三个线程 操纵此文件for (int i = 1; i = threadNum; i++) {// 1 2 3// 计较出每个线程开始的位置int startSize = (i - 1) * blockSize;// 竣事位置int endSize = (i) * blockSize;// 当线程是最后一个线程的时候if (i == threadNum) {// 判定文件的巨细是否大于计较出来的竣事位置if (size endSize) {// 竣事位置 便是 文件的巨细endSize = size;}}// 为每个线程建设一个随机的读取RandomAccessFile threadAccessFile = new RandomAccessFile(file,而其他应用在一秒内只有10ms的执行时间, 0, 0,。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/jiaob/java/12608.shtml

相关文章

风云图片

推荐阅读

返回java频道首页